<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>What is an image?</title><link rel="stylesheet" type="text/css" href="manual.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.0"><link rel="home" href="index.html" title="JpGraph Manual"><link rel="up" href="ch05.html" title="Chapter 5. Fundamentals of dynamic graph generation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">What is an image?</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center">Chapter 5. Fundamentals of dynamic graph generation</th><td width="20%" align="right"> </td></tr></table><hr></div><div class="sect1" title="What is an image?"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2494175"></a>What is an image?</h2></div></div></div>
            
            <p>This might be strange question and you might already now the answer but having a
                true understanding will help. An image is simply a data stream of octets (bytes)
                specifying the exact color of a number of pixels. A typical image uses 32 bits to
                specify the color which means it can encode 2^32 different colors (Homework: How
                many gray levels is possible with 32 bits?). It would be perfectly possible to send
                this data stream as it is and indeed this is how the bitmap (BMP) format specifies
                the data. However, image data usually have a lot of redundancies that can be used to
                reduce the size of the data that needs to be transmitted to specify any given image.
                These compression formats are what is more commonly known as for example PNG, JPEG
                or GIF type of images. So it is actually more correct, in our view, to look upon
                these formats as different compression techniques rather than as true image formats. </p>
            <p>Contrary to popular belief it is not the suffix on a file per se that identifies a
                particular file as an image on a HTTP server but rather the mapping on the server
                that instructs the server to send back a particular header for a particular file
                type (as identified by the file suffix), the MIME type. This might not seem like an
                important distinction to make but keeping this in mind will help understanding how
                images are created with a PHP script.</p>
            <p>A normal PHP scripts sends back character data (or more likely HTML encoded
                character data) that is displayed by the browser. However it is nothing that stops
                the PHP script from sending back data that instead should be interpreted as an image
                assuming of course we know how to create such data.. </p>
            <p>How the client (i.e. the browser) should interpret the data sent is all controlled
                by the header that is sent before the data. So this now leads us to the idea that if
                our PHP script by some means constructs a valid image, compressed in a known format
                (say PNG), we can tell the client to interpret the data we send back as an image by
                just making sure we first send a header indicating that the data is an image.</p>
            <p>This could now lead us to the perhaps surprising but crucial insight that if we
                call our script that sends back valid image data "<code class="filename">myimage.php</code>"
                and open it in a browser, for example by opening the local URI
                    "<code class="filename">http://localhost/myimage.php</code>" for the browser this is no
                different then opening an image directly (for example
                    "<code class="filename">http://localhost/myimage.png</code>") </p>
            <p>The only difference is that in the first case (our PHP script) we create the
                header and data our self and in the second case the HTTP server looks up the file
                suffix (*.png) to find out what kind of header to send before reading the file and
                just passing on the data to the client.</p>
            <p>Armed with this new knowledge we realize that our PHP script <span class="italic">is</span> an image for all practical purposes and intent from
                a clients point of view. So we could safely name our PHP script as a target for an
                    <span class="markup">&lt;img&gt;</span> tag. This gives us the final and most common way to
                call a graph script in a HTML page. </p>
            <p><code class="code">&lt;img src="myimage.php"&gt;</code></p>
            <p>in exactly the same way as we would do with the old type of images. The "*.php"
                suffix is no problem since the client (e.g. the browser) don't care what the file
                ending is. It only cares about what header the server returns. If that header tells
                the browser that the data received should be interpreted as a PNG image it will do
                so regardless of the name of the source file on the server.</p>
        </div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"><a accesskey="u" href="ch05.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
